查看原文
其他

真的能再也不“就差一个程序员”了吗|gpt-engineer 的潜力

ElfeXu 南瓜博士 2023-09-17

上周五我在 PM-Summit 大会上做了场分享,教产品经理们怎样能再也不“就差一个程序员”。

一开始主办方还有些担忧:AI 辅助编程,这不还是程序员的事儿吗,产品经理的会上讲这个?我说:“AI 时代,可以人人都是程序员”。咱们的分享不讲编程的技术问题,就讲思维方式。

主办方的担忧当然是有道理的。通常大家见到的 AI 辅助编程,要么是玩具,只够写个贪吃蛇游戏玩儿;要么给出的指导超复杂,让非程序员直接从入门到放弃。

有没有更实用的方法呢?

跟着 AI 轻松学编程的妙招

好歹曾在创新教育圈实践了那么些年,我想到一个好方法:项目式学习

我让 AI 扮演用项目式学习法教我完成项目的导师,它听了我的目标后做的第一件事是引导定义项目需求。


向上滑动阅览

我:

你是一个深度了解项目式学习精髓的技术导师。我是一名产品经理,我想做一个让宝妈和孩子一起创作亲子故事的程序。我完全没有技术基础,只大概知道技术开发分前后端、数据库,知道H5应用可以在网页、安卓、iOS上通用。你能否带我一步一步完成这个项目,让我在过程中学会必要的编程技能。

GPT4:

很好,我很高兴帮助你实现这个项目。作为一个初学者,你可能需要花费一些时间来学习,但我相信你能做到的。在我们开始之前,我想给你一些编程和项目式学习的概述。

首先,让我们讨论一下项目式学习。它是一种学习方法,通过实践中的项目来掌握新技能。这种方法有利于加深理解,并提供实际应用新技能的机会。我们将根据你的项目需求,教你所需要的编程技能。

现在,让我们开始第一步:定义你的项目需求

在开始任何项目之前,我们都需要清楚地理解我们要做什么。这意味着我们需要明确地定义我们的目标和需求。以下是关于你的项目的一些问题:

功能需求:这个亲子故事创建程序应该有什么功能?例如,是否需要编辑工具让用户创作故事?是否需要语音转文字功能让孩子和宝妈说出他们的故事?

用户交互:用户将如何与你的程序交互?他们需要注册账户吗?他们能分享他们的故事吗?

数据存储:你需要存储用户创建的故事吗?如果需要,我们需要考虑数据库的设计。

在定义清楚你的项目需求后,我们将根据需求逐步学习必要的技术。一般来说,对于一个完整的Web应用,你可能需要学习以下技术:

前端技术:如HTML、CSS和JavaScript。HTML用于构建网页的结构,CSS用于样式设计,JavaScript用于实现交互性。

后端技术:后端处理程序逻辑,如用户身份验证、数据处理等。这可能涉及到学习一种编程语言(如Python或JavaScript的Node.js),以及一种Web框架(如Django或Express.js)。

数据库技术:你可能需要学习如何设计数据库以存储用户数据,以及如何使用SQL或其他查询语言与数据库交互。

部署:最后,你需要学习如何将你的应用部署到服务器,让用户可以访问。

这只是一个大概的步骤和技术概览,随着项目进展,我们可能还需要学习其他技术。让我们开始定义你的项目需求吧!


定义需求对产品经理来说可太容易了呀。我用大白话给出几条需求后,AI 返回的结果很让人惊喜。整个项目被拆成五步,每一步 AI 都说明了这步的具体目标以及会涉及到的技术。跟着这样拆解好的任务边做边学,也就把整个项目需要掌握的庞杂知识一点点都掌握了。


向上滑动阅览

我:

用户需要注册账户;每天通过语音把故事记录下来;AI会参与故事创作。需要存储故事并且能反复听

GPT4:

很好,现在我们有了一个清晰的项目目标。让我们细分这个项目的步骤并列出你需要学习的技能。

第一步:用户注册与身份验证

你需要学习如何创建一个用户系统,包括注册,登录,以及用户信息的管理。这可能需要使用一种后端语言和框架,例如Python的Django框架,或JavaScript的Node.js与Express框架。同时,你也需要学习如何安全地存储用户信息,比如加密密码。

第二步:录音与语音转文字

用户需要通过语音来记录他们的故事。你可能需要学习如何在前端实现录音功能,以及将音频文件发送到后端。对于语音转文字,你可能需要使用一些第三方的API,例如Google的Speech-to-Text API

第三步:AI创作故事

根据用户的语音输入,AI需要参与创作故事。这可能需要学习一些基础的人工智能和自然语言处理的知识。OpenAI提供了GPT系列的模型,可以生成连贯的文字,可能会对你有帮助。

第四步:存储与播放故事

你需要学习如何设计数据库来存储用户的故事,包括他们的文字版本和音频版本。然后,你需要在前端实现一个播放器来播放音频。

第五步:布署你的应用

最后,你需要学习如何将你的应用布署到云服务器,让其他用户可以访问。

以上就是整个项目的大致步骤,你需要学习的技术和知识也有所涉及。请注意,这是一个相当大型的项目,对于编程初学者来说可能会有挑战。但是请不要担心,你可以分步骤进行,并且我会在你需要的时候提供帮助。接下来我们可以开始第一步:用户注册与身份验证。


项目式学习带来的另一个好处,是 AI 在一开始会简化任务,再逐步把复杂的内容添加进来。例如在我照着 AI 的指引安装好 nodejs 和 npm 后,AI 给出了如下的指引。注意它给的 HTML 页面多简单,这对学习者来说实在非常友好。


向上滑动阅览

我:

安装好了。录音功能要怎么实现?

GPT4:

很好。既然你已经安装好了开发环境,那我们就可以开始编写代码了。

首先,我们需要一个HTML页面,其中有一个按钮,用于开始和停止录音。这个页面的代码如下:

这是一个非常基础的HTML页面,只有一个标题和一个按钮。最重要的部分是

,这一行引入了我们即将编写的JavaScript文件。

现在我们需要创建一个main.js文件,并开始编写录音的代码。首先,我们需要一个媒体录制器(MediaRecorder)的实例。但在此之前,我们需要获取用户的麦克风权限。以下是如何获取权限并创建MediaRecorder实例的代码:


任务复杂时,代码很可能一口气写不完。此时有个妙招是让 AI 先拆解子任务定义代码框架


向上滑动阅览

我:

创作故事这一步,AI 需要根据孩子说的一些内容,来创造故事;它需要收集孩子的基本信息,还需要结合孩子今天发生的事情来创造,如果前几天对话的故事里有相关内容,需要把相关内容也提取出来作为上下文给到 AI。请帮我梳理一下,这个功能要怎么开发,请把功能尽可能拆细,然后为我提供代码框架,按合理的方式划分文件、类和函数,然后我们来一点点填空。

GPT4:

好的,按照你描述的功能需求,我们可能需要以下几个主要的步骤:

收集信息:这可能包括一个或多个表单,用于输入孩子的基本信息、主人公信息、以及当天发生的事情。

处理语音输入:如果输入是通过语音进行的,我们需要将这些语音转化为文字。

获取上下文:我们需要从数据库中检索以前的故事,以便为AI提供上下文。

生成故事:最后,我们使用所有收集到的信息来生成故事。

以下是一个可能的文件结构和代码框架:




有了代码框架后,再让 AI 一个个函数分别实现,人类只需要复制粘贴就可以了。这里还有一个超级好用的技巧:用 TDD (测试驱动开发,Test Driven Development)的思路,先让 AI 写文档,再根据文档写测试用例,最后照着文档+测试用例来写程序。



以上是我上周五分享的部分内容。前天晚上听说了 GPT-engineer, 深入研究了下,忍不住要和作者隔空击掌。

gpt-engineer 把我想的妙招都实现了

简单地说,gpt-engineer 是一个只要给出一段需求它就能自动完成整个编程工作的神器。例如下面的 Color Game 是我让它帮我完成的游戏,而贪吃蛇和番茄钟则来自项目作者的示例。

当然它也有还不太能搞定的事,但我认为这些问题都有办法解决,后面会说下思路。

gpt-Engineer 这个项目的代码非常简单,其中最精华的是多种模式的工作流定义,以及与此相关的十来个 prompt。

在 clarify 模式下,它会先分析需求、追问问题直到搞明白需求的所有细节。

例如网页版的找色块不同的游戏,一开始我给出的需求只有一句话:请给我写一个纯前端就能玩的 color-game。

它立刻分析出五个需要和我澄清的游戏细节,一一提问。五个细节分别为:游戏规则和机制;界面设计和布局;特定的颜色要求;记分系统;用户交互形式。

这个令人惊叹的效果,来自于下面这段 prompt:

澄清好需求后它就开始写需求文档,想得还真是真全面,例如下面这个 markdown 编辑器,它能想到要响应式设计、编辑器要适应各种设备和屏幕。

再然后它开始设计代码框架,列出关键类、方法以及文件结构。

如果选择 TDD /TDD+ 模式,它就会先写测试用例再写代码,测试用例的水平秒杀绝大多数程序员。

它甚至会对自己的代码吹毛求疵主动添加更多注释

程序写完后它会自动执行。例如 python 程序,它会写安装运行的脚本,然后运行程序。

gpt-engineer 特别让我佩服的就是完完整整的工程方案:创建虚拟环境让 GPT 写的代码的安装运行特别容易,良好的目录组织把项目本身的代码和 GPT 生成的诸多项目的代码安排得明明白白。项目本身的代码也非常简洁漂亮——核心代码只有 500 行,再加上差不多行数的 prompts。

gpt-engineer 暂时还做不到但今后一定能做到的事

目前的 gpt-engineer 还比较受 token 长度的限制。例如上面那个 markdown 编辑器,程序写到一半就被打断了。
要解决这个问题并不难:前面我们已经看到 GPT 能先写出代码框架,那我们只需要让 GPT 先生成文件名、类名、方法名,存下来,再写个循环调用、让 GPT 一个个方法填空即可。告诉 GPT 怎么填空的内容都是现成的——GPT 在生成代码框架时会添加丰富的注释把这个类/方法要做什么说得清清楚楚,直接塞回 prompt 就够了。
代码框架本身就超出 token 长度限制?那我们就一个模块一个模块地进行呀。


我在使用 TDD+ 模式时还遇到个问题:测试用例执行完成后程序卡着不继续了。感觉这是 GPT 生成的 shell 脚本的 bug:没让测试框架进程执行完毕后退出。估计修改下 prompt 也能搞定。


因为测试用例执行后就卡住的问题,gpt-engineer 似乎目前还不能自己修 BUG 。但从之前我使用 code interpreter 的经验来看,GPT 是有自己发现 bug 并修复的能力的。例如在 当 AI 开始自动思考和行动——让 GPT 左右互搏会发生什么 这篇文章里就能看到它主动写了测试用例、通过执行测试发现代码出错然后自行修复了 bug。所以有理由相信:如果设计足够好的方法,让测试用例执行结果可以反馈给 GPT,那这个过程也就能完全自动化了。

总之,虽然目前 gpt-engineer 做出来的多半还是玩具,虽然它确实还存在这样那样的问题,但这些问题都是有解的。很快,我们就应该能用它来完成越来越复杂的任务。

即便一时半会 gpt-engineer 还没那么强大,非程序员们在 AI 的帮助下,用项目式学习的方法,也能够学着开发自己需要的程序了。人人都是程序员的时代真的近在眼前。

---

昨天我在公司分享了 gpt-engineer 后,一个大二计算机系的暑期实习生颇担忧地问我:AI 写程序那么厉害了,我是不是该换专业呀?

当然不是。其实这个话题建硕之前有说过很多次,例如受 ChatGPT 冲击越大的行业是越有前途的行业。我在自己深度使用 GPT 编程、在和几个深度使用 GPT 编程的文科生交流后,对此也越来越认同。下一篇文章,打算说说为什么我对 AI 能替代掉自己的老本行工作如此乐观。

感兴趣的,扫码关注下南瓜博士,再加个星标呗。

附:之前写的若干 GPT 插件/Code Interpreter 等让 GPT 编程的文章

带上插件后的 ChatGPT 更惊艳!机器人和机器人对话的世界真的来了
加了插件的 ChatGPT 目前确实是中心,希望未来的机联网不是
能运行代码的 GPT 那是真的王炸呀
当 AI 开始自动思考和行动——让 GPT 左右互搏会发生什么
我敢肯定你没这么玩过 GPT

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存